package com.yc.utils;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;

import javax.imageio.ImageIO;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wb.swt.SWTResourceManager;

/**
 *窗口居中和弹框显示
 * @author UNO
 * 2021年6月19日下午11:18:02
 */
public class SWTUtil {

	public static String testcode="";//验证码，保存验证码，取这个值于用户输入的值作比较
	/**
	 * 生成图片验证码
	 * @param label
	 * @throws IOException
	 */
	public static void image(Label label) throws IOException{
		int size = 25;
		//BufferedImage 的构造函数可以设置图片的大小
		BufferedImage image = new BufferedImage(label.getSize().x, label.getSize().y,BufferedImage.TYPE_INT_RGB);//这里设置图片的大小
		//这里需要使用到java.awt.Graphics来绘制图片
		java.awt.Graphics graphics = image.getGraphics();
		Color color = new Color(245, 245, 220);
		graphics.setColor(color);//为图片添加的底色
		graphics.fillRect(0,0,label.getSize().x,label.getSize().y);
		char[] content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
		Random random = new Random();
		int index;
		
		for(int i=0;i<4;i++){//验证码长度
			index = random.nextInt(content.length);
			testcode+=String.valueOf(content[index]);//testcode是验证码
			//图片中文字的颜色
			graphics.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
			//图片中文字的位置
			graphics.drawString(content[index]+"",10+20*i,10+3*random.nextInt(4));
			//1,验证码文字,2文字距离上边的距离3,距离下部分的距离,可以更改这后面的两个数据,来改变图片的,验证码显示位置
			Font f = new Font("宋体",Font.BOLD ,size); //把字体对象放到这new
			graphics.setFont(f);
			
			//text_6.setFont(SWTResourceManager.getFont("Microsoft YaHei UI", 14, SWT.NORMAL));
		}
		
		ByteArrayOutputStream stream=new ByteArrayOutputStream();
		ImageIO.write(image, "jpg", stream);
		InputStream inputStream=new ByteArrayInputStream(stream.toByteArray());
		label.setImage(new Image(null, new ImageData(inputStream).scaledTo(label.getSize().x, label.getSize().y)));
		
	}
	public static void centerWindom(Shell shell) {
		//  Toolkit  工具包
		Dimension dm = Toolkit.getDefaultToolkit().getScreenSize();
		shell.setLocation((dm.width - shell.getSize().x) / 2, (dm.height - shell.getSize().y) / 2);
	}

	//标签居中的方法  有问题
	//	public static void centerLabel(Composite composite,Label label) {
	//		int x = composite.getSize().x;
	//		int y = composite.getSize().y;
	//		label.setLocation(x / 2, y / 2);
	//	}

	//图片自适应
	public static void imagesSize(Composite composite) {
		Image image = composite.getBackgroundImage(); //获取面板上的背景图片
		//监听面板上的变化
		composite.addPaintListener(new PaintListener() {

			@Override
			public void paintControl(PaintEvent e) {
				int h = composite.getBounds().height;//获取面板的高度
				int w = composite.getBounds().width;//获取面板的宽度

				int height = image.getBounds().height; //获取背景图片的高度
				int width = image.getBounds().width; //获取背景图片的宽度

				//图片自适应
				e.gc.drawImage(image, 0, 0, width, height, 0, 0, w, h);

			}
		});
	}

	/**
	 * 封装显示消息的提示框
	 * @param shell
	 * @param titie
	 * @param message
	 */
	public static void showMessage(Shell shell, String titie, String message) {
		MessageBox mb = new MessageBox(shell, SWT.NONE);
		mb.setText(titie);
		mb.setMessage(message);
		mb.open();

	}
}
